[アップデート] Fargate Spot で AWS Graviton ベースのコンピューティングがサポートされました
こんにちは、中川です。
Fargate Spot で AWS Graviton ベースのコンピューティングがサポートされました。
Fargate Spot は通常の Fargate(オンデマンド)と比較して、最大 70% 割引価格で利用できる購入オプションです。
これまでは、Fargate Spot で x86 ベースの CPU アーキテクチャのみサポートされていました。
今回のアップデートにより、AWS Graviton ベースのコンピューティングでも Fargate Spot が利用可能になり、ARM アーキテクチャを利用したアプリケーションでも大幅な割引オプションを利用できるようになりました。
料金
ARM ベースの通常 Fargate、x86 ベースの Fargate Spot と東京リージョンで料金を比較した表が以下になります。
CPU | キャパシティプロバイダ | 時間あたりの vCPU 料金 | 時間あたりのメモリ料金 |
---|---|---|---|
ARM | Fargate | $0.04045 | $0.00442 |
ARM | Fargate Spot | $0.0122023 | $0.00133335 |
x86 | Fargate Spot | $0.01525211 | $0.0016682 |
ARM ベースの通常 Fargate と比較して、ARM ベースの Fargate Spot を使うと約 70% 安く利用できます。
また、x86 ベースの Fargate Spot と比較すると約 20% 安く利用できます。
試してみた
ARM ベースの Fargate Spot を起動確認してみます。
ネットワークや IAM ロールは作成済みの前提とします。
クラスターを作成し、キャパシティープロバイダー戦略で Fargate Spot だけを使用するように設定します。
$ aws ecs create-cluster --cluster-name demo-cluster
$ aws ecs put-cluster-capacity-providers \
--cluster demo-cluster \
--capacity-providers FARGATE FARGATE_SPOT \
--default-capacity-provider-strategy capacityProvider=FARGATE_SPOT,base=1
ARM64 を指定したタスク定義のファイルを作成します。コマンドでは CPU アーキテクチャを出力するようにしています。
{
"family": "demo-task",
"networkMode": "awsvpc",
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "256",
"memory": "512",
"executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "demo-container",
"image": "public.ecr.aws/docker/library/alpine:latest",
"essential": true,
"command": [
"sh",
"-c",
"uname -m | tee /dev/termination-log"
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/fargate-task",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
}
}
}
],
+ "runtimePlatform": {
+ "cpuArchitecture": "ARM64",
+ "operatingSystemFamily": "LINUX"
}
}
タスク定義を登録して、タスクを実行します。
$ aws ecs register-task-definition --cli-input-json file://task.json
$ aws ecs run-task \
--cluster demo-cluster \
--network-configuration "awsvpcConfiguration={subnets=[\"subnet-xxxx\"],securityGroups=[\"sg-xxxx\"],assignPublicIp=ENABLED}" \
--task-definition demo-task
コンソールから Fargate Spot で起動できていることを確認できました。
また、ログを確認すると ARM で実行されていることも確認できました。
さいごに
Fargate Spot で AWS Graviton ベースのコンピューティングがサポートされ、ARM アーキテクチャを利用したアプリケーションでも Fargate Spot を使えるようになりました。
ARM ベースの通常の Fargate に比べて約 70% 安く、また x86 ベースの Fargate Spot と比較しても 20% 安く利用できます。
これまで Fargate Spot を使いたくて x86 にしていたり、マルチアーキテクチャを使用していたことがありました。
コスト最適化のためにも ARM ベースの Fargate Spot を使えないか検討してはいかがでしょうか。